/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.util.List;
import solicitacaoCompra.CadastroSolicitacaoCompra;
import solicitacaoCompra.RepositorioSolicitacaoCompra;
import solicitacaoCompra.SolicitacaoCompra;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorSolicitacaoCompra {
    private RepositorioSolicitacaoCompra objRepositorioSolicitacaoCompra = null;

    public ControladorSolicitacaoCompra(RepositorioSolicitacaoCompra objRepositorioSolicitacaoCompra) {
        this.objRepositorioSolicitacaoCompra = objRepositorioSolicitacaoCompra;
    }

     /**
     * Método que ira cadastrar  o objeto Solicitacao compra
     * 
     * @param objSolicitacaoCompra
     * @throws ErroAcessoRepositorioException 
     */
    public void cadastrar(SolicitacaoCompra objSolicitacaoCompra) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Validações
        if(objSolicitacaoCompra.getQtdProduto() == 0) throw new CamposObrigatoriosException("Não É Possivel Realizar uma solicitação com quantidade 0");
        if(objSolicitacaoCompra.getDescricaoProduto().getIdDescricaoProduto() == 0) throw new CamposObrigatoriosException("Produtos Solicitados não Informados!");
        
        // Cadastrando na base
        objCadastroSolicitacaoCompra.cadastrarAtualizar(objSolicitacaoCompra);
    }
    
    /**
     * Método que ira atualizar o objeto Solicitacao compra
     * 
     * @param objSolicitacaoCompra
     * @throws ErroAcessoRepositorioException 
     */
    public void atualizar(SolicitacaoCompra objSolicitacaoCompra) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Validações
        if(objSolicitacaoCompra.getIdSolicitacaoCompra() == 0) throw new CamposObrigatoriosException("Identificador Solicitação");
        if(objSolicitacaoCompra.getQtdProduto() == 0) throw new CamposObrigatoriosException("Não É Possivel Realizar uma solicitação com quantidade 0");
        if(objSolicitacaoCompra.getDescricaoProduto().getIdDescricaoProduto() == 0) throw new CamposObrigatoriosException("Produtos Solicitados não Informados!");
        
        // Cadastrando na base
        objCadastroSolicitacaoCompra.cadastrarAtualizar(objSolicitacaoCompra);
    }
    
    /**
     * Método que ira procurar na base um objeto solicitação compra pelo seu id
     * 
     * @param idSolicitacaoCompra
     * @return  SolicitacaoCompra
     * @throws ErroAcessoRepositorioException
     */
    public SolicitacaoCompra procurar(int idSolicitacaoCompra) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Validações
        if(idSolicitacaoCompra == 0) throw new CamposObrigatoriosException("Identificador Solicitação");
        
        // Cadastrando na base
        return objCadastroSolicitacaoCompra.procurar(idSolicitacaoCompra);
    }
    
    /**
     * Método que ira verificar a existencia na base um objeto solicitação compra pelo seu id
     * 
     * @param idSolicitacaoCompra
     * @return  boolean
     */
    public boolean existe(int idSolicitacaoCompra)throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Validações
        if(idSolicitacaoCompra == 0) throw new CamposObrigatoriosException("Solicitação de Compra não Cadastrada");
        
        // Cadastrando na base
        return objCadastroSolicitacaoCompra.existe(idSolicitacaoCompra);
    }
    
    /**
     * método que ira listar os objetos na base
     * @param strComplemento
     * @return  List<SolicitacaoCompra>
     */
    public List<SolicitacaoCompra> listar(String strComplemento){
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Cadastrando na base
        return objCadastroSolicitacaoCompra.listar(strComplemento);
    }
    
    /**
     * 
     * @param idSolicitacaoCompra 
     */
    public void remover(int idSolicitacaoCompra)throws Exception, CamposObrigatoriosException{
       CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Validações
        if(idSolicitacaoCompra == 0) throw new CamposObrigatoriosException("Solicitação de Compra não Cadastrada");
        
        // Cadastrando na base
        objCadastroSolicitacaoCompra.remover(idSolicitacaoCompra);
    }
    
    
    /**
     * método que ira listar as solicitações ativas e que não houveram compras para as mesmas na base
     * @param strComplemento
     * @return  List<SolicitacaoCompra>
     */
    public List<SolicitacaoCompra> listarAtivasNaoComppradas(){
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);
        
        // Cadastrando na base
        return objCadastroSolicitacaoCompra.listarAtivasNaoComppradas();
    }
    
    /**
     * método que ira listar os objetos na base
     * @param strComplemento
     * @return  List<SolicitacaoCompra>
     */
    public List<SolicitacaoCompra> listarPordescricaoProduto(int intDescricaoProduto) throws CamposObrigatoriosException{
        CadastroSolicitacaoCompra objCadastroSolicitacaoCompra = new CadastroSolicitacaoCompra(this.objRepositorioSolicitacaoCompra);

        
        // Validações
        if(intDescricaoProduto == 0) throw new CamposObrigatoriosException("Descrição Produto");
        
        // Cadastrando na base
        return objCadastroSolicitacaoCompra.listarPordescricaoProduto(intDescricaoProduto);
    }
}
